from functools import wraps
from flask import request

def inject_user_id(default_user_id=1):
    """
    自动从 Cookie 获取 user_id 的装饰器
    :param default_user_id: Cookie 中获取不到时的默认值
    """
    def decorator(view_func):
        @wraps(view_func)  # 保留原视图函数的元信息（如函数名、文档字符串）
        def wrapper(*args, **kwargs):
            # 1. 从 Cookie 获取 user_id，转换为 int
            try:
                user_id = request.cookies.get('user_id')
                user_id = int(user_id) if user_id is not None else default_user_id
            except (ValueError, TypeError):
                # 若 Cookie 中 user_id 不是整数（如字符串、空值），也使用默认值
                user_id = default_user_id
            
            # 2. 将 user_id 注入到视图函数的关键字参数中
            kwargs['user_id'] = user_id
            # 3. 执行原视图函数并返回结果
            return view_func(*args, **kwargs)
        return wrapper
    return decorator